home *** CD-ROM | disk | FTP | other *** search
- {
- bcp100@cd4680fs.rrze.uni-erlangen.de (Peter Gedeck)
-
- : Does anyone have a relative path routine? An example of what I mean by a
- : relative path routine is the Turbo Pascal IDE's editor window titles. It
- : only displays as much of the files path name as is necessary. It should be
- : something like
- : function RelativePath(FullPath: string): string;
-
- This is what I use to get a relative file name. I think it works correctly
- and hope you will find it useful.
- }
-
- Uses
- Dos;
-
-
- function GetCurDir : DirStr;
- var
- CurDir : DirStr;
- begin
- GetDir(0, CurDir);
- GetCurDir := CurDir;
- end;
-
-
- function GetCurDrive : Char; assembler;
- asm
- MOV AH,19H
- INT 21H
- ADD AL,'A'
- end;
-
-
- function GetRelativeFileName(F : String) : String;
- var
- D : DirStr;
- N : NameStr;
- E : ExtStr;
- i : integer;
- rd : string;
-
- begin
- F := FExpand(F);
- FSplit(F, D, N, E);
- if GetCurDrive = D[1] then
- begin
- { Same Drive - remove Driveinformation from D }
- Delete(D, 1, 2);
- F := GetCurDir + '\';
- Delete(F, 1, 2);
- { Maybe it is a file in a directory higher than the actual directory }
- i := Pos(F, d);
- if i > 0 then
- Delete(d, 1, length(F))
- else
- begin
- rd := '';
- if Pos(d, F) = 0 then
- repeat
- repeat
- rd := d[Ord(d[0])] + rd;
- dec(d[0]);
- until d[Ord(d[0])] = '\';
- until Pos(d, F) > 0;
-
- { Maybe it is a file in a directory lower than the actual directory }
- if Pos(d, F) > 0 then
- begin
- repeat
- rd := '..\' + rd;
- dec(F[0]);
- while F[Ord(F[0])] <> '\' do
- dec(F[0]);
- until (Pos(d, F) > 0) and not ((d = '\') and (F <> '\'));
- d := rd;
- end;
- end;
- end;
- GetRelativeFileName := (D + N + E);
- end;
-
-
- begin
- Writeln(GetRelativeFileName('C:\qmpro\dl\bp\lib\ansi.pas'));
- end.